package MODEL;

import java.util.ArrayList;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;

/**
 * Modelo principal do sistema
 */
public class RockInRio extends AbstractModel {
    private ArrayList<LineUpModel> lineUps;
    private CallableStatement      chamada;
    private ResultSet              resultado;
    
    public RockInRio() {
        
    }
    
    public ArrayList<LineUpModel> getLineUps() {
        return lineUps;
    }    

    /**
     * Método cadastro da pessoa no banco de dados
     * 
     * @param conexao
     * @return ArrayList<LineUpModel>
     * @throws java.sql.SQLException
     */        
    public ArrayList<LineUpModel> getLineUpsDB(Connection conexao) throws SQLException {        
        
        try {
            chamada = conexao.prepareCall("call F_GET_LINE_UPS(?)");
            chamada.registerOutParameter(1, OracleTypes.CURSOR);
            chamada.execute();
            resultado = (ResultSet) chamada.getObject(1);
        } catch (SQLException e) {
            //System.out.println(e.getMessage());
        }        
        
        lineUps = new ArrayList<>();
        while (resultado.next()) {
            lineUps.add(new LineUpModel(dataSQLtoCalendar(resultado.getDate("data")), resultado.getInt("capacidade"), resultado.getInt("ingressos_vendidos")));
        }
        return lineUps;
    }

    public void setLineUps(ArrayList<LineUpModel> lineUps) {
        this.lineUps = lineUps;
    }

    public CallableStatement getChamada() {
        return chamada;
    }

    public void setChamada(CallableStatement chamada) {
        this.chamada = chamada;
    }

    public ResultSet getResultado() {
        return resultado;
    }

    public void setResultado(ResultSet resultado) {
        this.resultado = resultado;
    }
}
